home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 9 / FM Towns Free Software Collection 9.iso / taropyon / silib / inc / siscn.h < prev    next >
Encoding:
C/C++ Source or Header  |  1994-11-16  |  12.8 KB  |  474 lines

  1. /*************************************************************************
  2. *    "siscn.h"
  3. *-------------------------------------------------------------------------
  4. *    Screen library
  5. *                                            Copyright (c) 1993, TaroPYON
  6. *************************************************************************/
  7.  
  8. #ifndef    _SISCN_H
  9. #define    _SISCN_H
  10.  
  11. #ifndef    _SITYPES_H
  12. #    include    <sitypes.h>
  13. #endif
  14. #ifndef    _SIDEFS_H
  15. #    include    <sidefs.h>
  16. #endif
  17. #ifndef    _EGB_MAC_H
  18. #    include    <egb_mac.h>
  19. #endif
  20. #ifndef    _SIFTS_H
  21. #    include    <sifts.h>
  22. #endif
  23. #ifndef    _SCN_IMGBLK_H
  24. #    include    <SCN/imgblk.h>
  25. #endif
  26. #ifndef    _SCN_LAYER_H
  27. #    include    <SCN/layer.h>
  28. #endif
  29.  
  30. #define    SICOL_TILE_START    (0x0100_0000)    /* タイリング        */
  31. #define    SICOL_TILE_MAX        (0x0001_0000)    /* タイルパターン数    */
  32. #define    SICOL_MIX_START        (0x0200_0000)    /* ミックス            */
  33. #define    SICOL_MIX_MAX        (0x0001_0000)
  34.  
  35. typedef struct _tiledat_t
  36. {
  37.     struct _tiledat_t    *next;
  38.     COLOR_T            colno;            /* 色番号            */
  39.     int                pixel;            /* ピクセル            */
  40.     int                xb;                /* 横方向のバイト数    */
  41.     int                yb;                /* 縦方向のドット数    */
  42.     char            *data;            /* データ            */
  43. } TILEDAT_T;
  44.  
  45. typedef struct
  46. {
  47.     COLOR_T        col;        /* 色                */
  48.     TILEDAT_T    *tile;        /* タイル            */
  49.     int            mdWrt;        /* 書き込みモード    */
  50. } SCNFUNC_T;
  51.  
  52.  
  53. #define    SISCN_LAYER_MAX        (8)
  54.  
  55. typedef    struct
  56. {
  57.     int            pgWrt;
  58.     int            pgDsp;
  59.     int            numLayer;        /* レイア数    */
  60.     LAYER_T        layer[SISCN_LAYER_MAX];
  61.     LAYER_T        *layerCrt;        /* カレントレイア */
  62. } SISCN_T;
  63.  
  64. extern SISCN_T       *SiScn;
  65. extern char           *EgbPtr;
  66. extern int            FlgScnInit;
  67.  
  68. /*----------------------------------------------------------------------*/
  69. extern int        SCN_init( int mdScn );
  70. extern void        SCN_sysTerm(void);
  71. extern int        SCN_wrtPage( int page );
  72.  
  73. extern void        SCN_setSysPalette(void);
  74.  
  75. extern int        SCN_sysReinit(void);
  76.  
  77. /*----------------------------------------------------------------------*/
  78. struct _scnline_t
  79. {
  80.     struct
  81.     {    unsigned short    n;
  82.         short            x1,y1,x2,y2;
  83.     } egbPara;
  84.     SCNFUNC_T            fnc;
  85. };
  86.  
  87. #define    SCN_LINE(_x1,_y1,_x2,_y2,_mdWrt,_col)    \
  88. {    struct _scnline_t    _para;        \
  89.     _para.egbPara.n  = 2;            \
  90.     _para.egbPara.x1 = (_x1);        \
  91.     _para.egbPara.y1 = (_y1);        \
  92.     _para.egbPara.x2 = (_x2);        \
  93.     _para.egbPara.y2 = (_y2);        \
  94.     _para.fnc.col    = (_col);        \
  95.     _para.fnc.tile   = NULL;        \
  96.     _para.fnc.mdWrt  = (_mdWrt);    \
  97.     SCN_line( &_para );                \
  98. }
  99.  
  100. extern void        SCN_line( struct _scnline_t *para );
  101.  
  102. /*----------------------------------------------------------------------*/
  103. struct _scnbox_t
  104. {
  105.     struct
  106.     {    short            x1,y1,x2,y2;
  107.     } egbPara;
  108.     SCNFUNC_T            fnc;
  109. };
  110. extern    void    SCN_box( struct _scnbox_t *para );
  111.  
  112. #define    SCN_BOX(_x1,_y1,_x2,_y2,_mdWrt,_col)    \
  113. {    struct _scnbox_t    _para;        \
  114.     _para.egbPara.x1 = (_x1);        \
  115.     _para.egbPara.y1 = (_y1);        \
  116.     _para.egbPara.x2 = (_x2);        \
  117.     _para.egbPara.y2 = (_y2);        \
  118.     _para.fnc.col    = (_col);        \
  119.     _para.fnc.tile   = NULL;        \
  120.     _para.fnc.mdWrt  = (_mdWrt);    \
  121.     SCN_box( &_para );                \
  122. }
  123.  
  124. /*----------------------------------------------------------------------*/
  125. struct _scnboxf_t
  126. {
  127.     struct
  128.     {    short            x1,y1,x2,y2;
  129.     } egbPara;
  130.     SCNFUNC_T            fnc;
  131. };
  132.  
  133. #define    SCN_BOXF(_x1,_y1,_x2,_y2,_mdWrt,_col)    \
  134. {    struct _scnboxf_t    _para;        \
  135.     _para.egbPara.x1 = (_x1);        \
  136.     _para.egbPara.y1 = (_y1);        \
  137.     _para.egbPara.x2 = (_x2);        \
  138.     _para.egbPara.y2 = (_y2);        \
  139.     _para.fnc.col    = (_col);        \
  140.     _para.fnc.tile   = NULL;        \
  141.     _para.fnc.mdWrt  = (_mdWrt);    \
  142.     SCN_boxf( &_para );                \
  143. }
  144.  
  145. extern void        SCN_boxf( struct _scnboxf_t *para );
  146.  
  147. /*----------------------------------------------------------------------*/
  148. struct _scnboxhol_t
  149. {
  150.     FRAME_T                fr;
  151.     SCNFUNC_T            fnc1;
  152.     SCNFUNC_T            fnc2;
  153. };
  154. extern    void    SCN_boxhol( struct _scnboxhol_t *para );
  155.  
  156. #define    SCN_BOXHOL(_x1,_y1,_x2,_y2,_mdWrt,_col1,_col2)    \
  157. {    struct _scnboxhol_t    _para;        \
  158.     _para.fr.x1      = (_x1);        \
  159.     _para.fr.y1      = (_y1);        \
  160.     _para.fr.x2      = (_x2);        \
  161.     _para.fr.y2      = (_y2);        \
  162.     _para.fnc1.col    = (_col1);    \
  163.     _para.fnc1.tile   = NULL;        \
  164.     _para.fnc1.mdWrt  = (_mdWrt);    \
  165.     _para.fnc2.col    = (_col2);    \
  166.     _para.fnc2.tile   = NULL;        \
  167.     _para.fnc2.mdWrt  = (_mdWrt);    \
  168.     SCN_boxhol( &_para );            \
  169. }
  170.  
  171. /*----------------------------------------------------------------------*/
  172. struct _scnboxfhol_t
  173. {
  174.     FRAME_T                fr;
  175.     SCNFUNC_T            fnc1;
  176.     SCNFUNC_T            fnc2;
  177.     SCNFUNC_T            fnc3;
  178. };
  179. extern    void    SCN_boxfhol( struct _scnboxfhol_t *para );
  180.  
  181. #define    SCN_BOXFHOL(_x1,_y1,_x2,_y2,_mdWrt,_col1,_col2,_col3)    \
  182. {    struct _scnboxfhol_t _para;        \
  183.     _para.fr.x1      = (_x1);        \
  184.     _para.fr.y1      = (_y1);        \
  185.     _para.fr.x2      = (_x2);        \
  186.     _para.fr.y2      = (_y2);        \
  187.     _para.fnc1.col    = (_col1);    \
  188.     _para.fnc1.tile   = NULL;        \
  189.     _para.fnc1.mdWrt  = (_mdWrt);    \
  190.     _para.fnc2.col    = (_col2);    \
  191.     _para.fnc2.tile   = NULL;        \
  192.     _para.fnc2.mdWrt  = (_mdWrt);    \
  193.     _para.fnc3.col    = (_col3);    \
  194.     _para.fnc3.tile   = NULL;        \
  195.     _para.fnc3.mdWrt  = (_mdWrt);    \
  196.     SCN_boxfhol( &_para );            \
  197. }
  198.  
  199. /*----------------------------------------------------------------------*/
  200. struct _scnboxcon_t
  201. {
  202.     FRAME_T                fr;
  203.     int                    n;
  204.     SCNFUNC_T            fnc1;
  205.     SCNFUNC_T            fnc2;
  206. };
  207. extern    void    SCN_boxcon( struct _scnboxcon_t *para );
  208.  
  209. #define    SCN_BOXCON(_x1,_y1,_x2,_y2,_n,_mdWrt,_col1,_col2)    \
  210. {    struct _scnboxcon_t    _para;        \
  211.     _para.fr.x1       = (_x1);        \
  212.     _para.fr.y1       = (_y1);        \
  213.     _para.fr.x2       = (_x2);        \
  214.     _para.fr.y2       = (_y2);        \
  215.     _para.n           = (_n);        \
  216.     _para.fnc1.col    = (_col1);    \
  217.     _para.fnc1.tile   = NULL;        \
  218.     _para.fnc1.mdWrt  = (_mdWrt);    \
  219.     _para.fnc2.col    = (_col2);    \
  220.     _para.fnc2.tile   = NULL;        \
  221.     _para.fnc2.mdWrt  = (_mdWrt);    \
  222.     SCN_boxcon( &_para );            \
  223. }
  224.  
  225. /*----------------------------------------------------------------------*/
  226. struct _scnboxfcon_t
  227. {
  228.     FRAME_T                fr;
  229.     int                    n;
  230.     SCNFUNC_T            fnc1;
  231.     SCNFUNC_T            fnc2;
  232.     SCNFUNC_T            fnc3;
  233. };
  234. extern    void    SCN_boxfcon( struct _scnboxfcon_t *para );
  235.  
  236. #define    SCN_BOXFCON(_x1,_y1,_x2,_y2,_n,_mdWrt,_col1,_col2,_col3)    \
  237. {    struct _scnboxfcon_t _para;        \
  238.     _para.fr.x1       = (_x1);        \
  239.     _para.fr.y1       = (_y1);        \
  240.     _para.fr.x2       = (_x2);        \
  241.     _para.fr.y2       = (_y2);        \
  242.     _para.n           = (_n);        \
  243.     _para.fnc1.col    = (_col1);    \
  244.     _para.fnc1.tile   = NULL;        \
  245.     _para.fnc1.mdWrt  = (_mdWrt);    \
  246.     _para.fnc2.col    = (_col2);    \
  247.     _para.fnc2.tile   = NULL;        \
  248.     _para.fnc2.mdWrt  = (_mdWrt);    \
  249.     _para.fnc3.col    = (_col3);    \
  250.     _para.fnc3.tile   = NULL;        \
  251.     _para.fnc3.mdWrt  = (_mdWrt);    \
  252.     SCN_boxfcon( &_para );            \
  253. }
  254.  
  255. /*----------------------------------------------------------------------*/
  256. struct _scnputc_t
  257. {
  258.     FTSDAT_T    *fts;    /* フォント    */
  259.     SCNFUNC_T    ffnc;    /* 文字色    */
  260.     SCNFUNC_T    bfnc;    /* 背景色    */
  261.  
  262.     POINT_T        point;    /* 座標        */
  263.     int            code;    /* コード    */
  264.     int            xs, ys;
  265.  
  266.     int            md;        /* ワーク    */
  267.     int            mdWrt;    /* ワーク    */
  268.     int            clip;    /* ワーク    */
  269. };
  270. extern void        SCN_putcSetup( struct _scnputc_t *para );
  271. extern void        SCN_putc( struct _scnputc_t *para );
  272.  
  273. #define    SCN_PUTCSETUP(_para,_fts,_mdWrt,_col,_bac)    \
  274. {                                    \
  275.     (_para)->fts        = (_fts);    \
  276.     (_para)->ffnc.col   = (_col);    \
  277.     (_para)->ffnc.tile  = NULL;        \
  278.     (_para)->ffnc.mdWrt = (_mdWrt);    \
  279.     (_para)->bfnc.col   = (_bac);    \
  280.     (_para)->bfnc.tile  = NULL;        \
  281.     (_para)->bfnc.mdWrt = (_mdWrt);    \
  282.     SCN_putcSetup( _para );            \
  283. }
  284. #define    SCN_PUTC(_para,_code,_x,_y)    \
  285. {                                    \
  286.     (_para)->point.x = (_x);        \
  287.     (_para)->point.y = (_y);        \
  288.     (_para)->code    = (_code);        \
  289.     SCN_putc( _para );                \
  290. }
  291.  
  292. /*----------------------------------------------------------------------*/
  293. struct _scnputs_t
  294. {
  295.     FTSDAT_T    *fts;    /* フォント    */
  296.     POINT_T        point;    /* 座標        */
  297.     SCNFUNC_T    ffnc;    /* 文字色    */
  298.     SCNFUNC_T    bfnc;    /* 背景色    */
  299.     CONST char    *s;        /* 文字列    */
  300. };
  301. extern    void    SCN_puts( struct _scnputs_t *para );
  302.  
  303. #define    SCN_PUTS(_fts,_s,_x,_y,_mdWrt,_col,_bac)    \
  304. {    struct _scnputs_t _para;        \
  305.     _para.fts        = (_fts);        \
  306.     _para.point.x    = (_x);        \
  307.     _para.point.y    = (_y);        \
  308.     _para.ffnc.col   = (_col);        \
  309.     _para.ffnc.tile  = NULL;        \
  310.     _para.ffnc.mdWrt = (_mdWrt);    \
  311.     _para.bfnc.col   = (_bac);        \
  312.     _para.bfnc.tile  = NULL;        \
  313.     _para.bfnc.mdWrt = (_mdWrt);    \
  314.     _para.s          = (_s);        \
  315.     SCN_puts( &_para );                \
  316. }
  317.  
  318. /*----------------------------------------------------------------------*/
  319. typedef struct
  320. {
  321.     int                    pixel;
  322.     size_t                siz;
  323.     struct
  324.     {    char            *dat;
  325.         unsigned short    seg;
  326.         short            x1, y1, x2, y2;
  327.     } egbPara;
  328.     short    _dmy1;
  329. } SCNBLK_T;
  330.  
  331. extern SCNBLK_T       *SCN_getblk( FRAME_T *para );
  332. extern int            SCN_dspblk( SCNBLK_T *blk, int x, int y );
  333. extern int            SCN_putblk( SCNBLK_T *blk );
  334.  
  335. /*----------------------------------------------------------------------*/
  336. struct _scnptn_t        /* モノクロデータ表示用    */
  337. {
  338.     struct
  339.     {    char            *dat;
  340.         unsigned short    ds;
  341.         short            x1, y1, x2, y2;
  342.     } egbPara;
  343.     short    _dmy1;
  344.     SCNFUNC_T    ffnc;    /* 文字色    */
  345.     SCNFUNC_T    bfnc;    /* 背景色    */
  346. };
  347.  
  348. #define    SCN_PUTPTN(_dat,_ds,_x1,_y1,_x2,_y2,_mdWrt,_col,_bac)    \
  349. {    struct _scnptn_t    _para;        \
  350.     _para.egbPara.dat = (_dat);        \
  351.     _para.egbPara.ds  = (_ds);        \
  352.     _para.egbPara.x1  = (_x1);        \
  353.     _para.egbPara.y1  = (_y1);        \
  354.     _para.egbPara.x2  = (_x2);        \
  355.     _para.egbPara.y2  = (_y2);        \
  356.     _para.ffnc.col    = (_col);        \
  357.     _para.ffnc.tile   = NULL;        \
  358.     _para.ffnc.mdWrt  = (_mdWrt);    \
  359.     _para.bfnc.col    = (_bac);        \
  360.     _para.bfnc.tile   = NULL;        \
  361.     _para.bfnc.mdWrt  = (_mdWrt);    \
  362.     SCN_putptn( &_para );            \
  363. }
  364. extern void    SCN_putptn( struct _scnptn_t *para );
  365.  
  366. /*----------------------------------------------------------------------*/
  367. struct _scnimg_t
  368. {
  369.     int                    pixel;
  370.     size_t                siz;
  371.     struct
  372.     {    char            *dat;
  373.         unsigned short    ds;
  374.         short            x1, y1, x2, y2;
  375.     } egbPara;
  376.     short    _dmy1;
  377.     SCNFUNC_T    ffnc;    /* 文字色    */
  378.     SCNFUNC_T    bfnc;    /* 背景色    */
  379. };
  380.  
  381. #define    SCN_PUTIMG(_pixel,_siz,_dat,_ds,_x1,_y1,_x2,_y2,_mdWrt,_col,_bac)    \
  382. {    _para.pixel = (_pixel);            \
  383.     _para.siz   = (_siz);            \
  384.     _para.egbPara.dat = (_dat);        \
  385.     _para.egbPara.ds  = (_ds);        \
  386.     _para.egbPara.x1  = (_x1);        \
  387.     _para.egbPara.y1  = (_y1);        \
  388.     _para.egbPara.x2  = (_x2);        \
  389.     _para.egbPara.y2  = (_y2);        \
  390.     _para.ffnc.col    = (_col);        \
  391.     _para.ffnc.tile   = NULL;        \
  392.     _para.ffnc.mdWrt  = (_mdWrt);    \
  393.     _para.bfnc.col    = (_bac);        \
  394.     _para.bfnc.tile   = NULL;        \
  395.     _para.bfnc.mdWrt  = (_mdWrt);    \
  396.     SCN_putimg( &_para );            \
  397. }
  398. #define    SCN_PUTIMGPTN(_img,_x,_y,_mdWrt,_col,_bac)    \
  399. {    struct _scnimg_t    _para;            \
  400.     _para.pixel = (_img)->pixel;        \
  401.     _para.siz   = (_img)->siz;            \
  402.     _para.egbPara.dat = (_img)->dat;    \
  403.     _para.egbPara.ds  = getds();        \
  404.     _para.egbPara.x1  = _x;                \
  405.     _para.egbPara.y1  = _y;                \
  406.     _para.egbPara.x2  = _para.egbPara.x1 + (_img)->xs - 1;    \
  407.     _para.egbPara.y2  = _para.egbPara.y1 + (_img)->ys - 1;    \
  408.     _para.ffnc.col    = (_col);            \
  409.     _para.ffnc.tile   = NULL;            \
  410.     _para.ffnc.mdWrt  = (_mdWrt);        \
  411.     _para.bfnc.col    = (_bac);            \
  412.     _para.bfnc.tile   = NULL;            \
  413.     _para.bfnc.mdWrt  = (_mdWrt);        \
  414.     SCN_putimg( &_para );                \
  415. }
  416. extern void            SCN_putimg( struct _scnimg_t *para );
  417.  
  418. /*----------------------------------------------------------------------*/
  419. struct _scnscroll_t
  420. {
  421.     FRAME_T        fr;
  422.     int            x, y;
  423. };
  424.  
  425. extern void    SCN_scroll(struct _scnscroll_t *para);
  426.  
  427. #define    SCN_SCROLL(_x1,_y1,_x2,_y2,_xd,_yd)            \
  428. {    struct _scnscroll_t    _para;                        \
  429.     _para.fr.x1 = (_x1);    _para.fr.y1 = (_y1);    \
  430.     _para.fr.x2 = (_x2);    _para.fr.y2 = (_y2);    \
  431.     _para.x = (_xd);                                \
  432.     _para.y = (_yd);                                \
  433.     SCN_scroll(&_para);                                \
  434. }
  435.  
  436. /*----------------------------------------------------------------------*/
  437. extern void            SCN_viewGet( FRAME_T *view );
  438. extern void            SCN_viewSet( FRAME_T *view );
  439.  
  440. extern int            SCN_palette( int vsync, int col, PLT_T *plt );
  441. extern COLOR_T        SCN_tile_getNewColNo(void);
  442. extern int            SCN_tile_setDat( TILEDAT_T *tile );
  443. extern TILEDAT_T   *SCN_tile_alloc( int pixel, int xb, int yb, CONST char *dat );
  444. extern TILEDAT_T   *SCN_tile_get( COLOR_T col );
  445. extern void            SCN_tile_free( COLOR_T col );
  446.  
  447. #define    SCNEGB_TILESET(_c,_tile)    \
  448.     EGB_tilePattern(EgbPtr,(_c),(_tile)->xb,(_tile)->yb,(_tile)->data)
  449.  
  450. /*----------------------------------------------------------------------*/
  451. #define    SIMIXTILE_MAX    (32)
  452.  
  453. #define    MIXCOL_NORMAL    (0x00)
  454. #define    MIXCOL_STD1        (0x01)
  455. #define    MIXCOL_CROSS1    (0x10)
  456. #define    MIXCOL_CROSS2    (0x11)
  457.  
  458. extern    COLOR_T    SCN_tile_mixCol( int bufno, int typ, COLOR_T c1, COLOR_T c2 );
  459.  
  460. /*----------------------------------------------------------------------*/
  461. extern    COLOR_T    SCN_tile_newMixCol( COLOR_T col, int typ, COLOR_T c1, COLOR_T c2 );
  462.  
  463. /*----------------------------------------------------------------------*/
  464. extern void            scnTile_dotset( TILEDAT_T *tile, int x, int y, COLOR_T col);
  465. extern COLOR_T        SCN_tile_makeCol( COLOR_T col, TILEDAT_T *(*func)(COLOR_T *), COLOR_T *coltbl );
  466. extern TILEDAT_T   *scn_tile_allocDat( int xs, int ys);
  467.  
  468. extern TILEDAT_T   *scn_mktile_normal(COLOR_T *coltbl);
  469. extern TILEDAT_T   *scn_mktile_check1(COLOR_T *coltbl);
  470.  
  471. /*----------------------------------------------------------------------*/
  472.  
  473. #endif
  474.